iT邦幫忙

2022 iThome 鐵人賽

DAY 4
0
Modern Web

clojure 刷刷鍋系列 第 4

Clojure 肉片 -第 4 塊

  • 分享至 

  • xImage
  •  

【心得】

  1. 今天蠻簡單的,但寫的時候會想說為什麼 clojure 世界沒有 sum 這種常見的 function 呢?猜可能是希望大家熟悉固定幾個很好變形的 function,而不被只能做單一事情的 sum 綁死吧
  2. 看到 solution best practice 其實跟自己的差不多嗎(哈XD)主要是有人用 apply 取代 redcue,兩者有何差異?看了這篇文章 提到只要是 association function 的情境下兩者是通用的,就像這次數字要『累加』或是下面例子的『串接』都是

(def str1 ["st1" "st2" "st3"])

;; 很怪,跟期待的字串連接不同
(str str1) => "[\"st1\" \"st2\" \"st3\"]"

;; 調整方式
(apply str str1) => "st1st2st3"

【今日湯底】

Write a program that finds the summation of every number from 1 to num. The number will always be a positive integer greater than 0.

For example:

summation(2) -> 3
1 + 2

summation(8) -> 36
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8

(必須通過以下測試)

(ns kata.test
  (:require [clojure.test :refer :all]
            [kata.summation :refer :all]))
(defn tester [n e]
  (testing (str "Testing for " n)
    (is (= (summation n) e))))
(deftest basic-tests
  (tester 1 1)
  (tester 8 36)
  (tester 22 253)
  (tester 100 5050)
  (tester 213 22791))

【我的答案】

(ns kata.summation)
(defn summation [n]
  "your code here"
  (reduce + (range 1 (inc n)))
  )

思路:

  1. 先用 range 把給的值從 1 開始往後展開數列,但因為 range 只到給的值的前一個 ex. (range 1 3) => (1 2),所以才會再 inc 加 1
  2. 用 reduce 把每個值加起來

【其他人的答案】

(ns kata.summation)
(defn summation [n]
  "your code here"
  (apply + (range (+ 1 n))))

上一篇
Clojure 肉片 -第 3 塊
下一篇
Clojure 肉片 -第 5 塊
系列文
clojure 刷刷鍋30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言